Packet networks today operate according to a model in which the processing operations that take place on a given packet within a network are implicit, based on a fixed-format packet header and a series of fixed programs that exist inside each of the network devices along the packet's path. That is, a packet header is merely a data object with a well-known format that is operated on by programs within devices designed to handle such objects, such as routers, switches, firewalls, load-balancers, and others. The “actions” or functions of packet processing are often performed by monolithic, proprietary black-box hardware/software programs, and the packets themselves serve merely as passive inputs to these routines.
As the number of desired packet processing functions grows, as network operators increasingly seek consolidation and simplification to avoid maintaining large numbers of different makes and models of network appliances, and as ever larger parts of the network are “virtualized,” it becomes important to have a more powerful, general, and expressive approach for describing the sequence of processing operations that should be performed on a packet as it travels through a network from ingress to egress.